home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
System Booster
/
System Booster.iso
/
Commodities
/
NewEdit V18b
/
NewEdit_Source.lha
/
ClipBoard.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-05-30
|
2KB
|
85 lines
#include <libraries/iffparse.h>
#include <clib/dos_protos.h>
#include <clib/exec_protos.h>
#include <clib/iffparse_protos.h>
#include <clib/locale_protos.h>
#include <pragmas/dos_pragmas.h>
#include <pragmas/exec_pragmas.h>
#include <pragmas/iffparse_pragmas.h>
#include<pragmas/locale_pragmas.h>
#define ID_FTXT MAKE_ID('F','T','X','T')
#define ID_CHRS MAKE_ID('C','H','R','S')
extern struct Library *DOSBase, *SysBase;
struct Library *IFFParseBase = NULL;
struct IFFHandle *Iff = NULL;
BOOL init_iffparse( void )
{
if ( ( IFFParseBase = OpenLibrary( "iffparse.library", 37L ) ) != NULL )
{
if ( (Iff = AllocIFF() ) != NULL )
{
if ( ( Iff->iff_Stream = (ULONG)OpenClipboard( 0 ) ) != NULL )
{
InitIFFasClip( Iff );
return TRUE;
}
}
}
return FALSE;
}
void close_iffparse( void )
{
if ( Iff != NULL && Iff->iff_Stream != NULL )
CloseClipboard( (void *)Iff->iff_Stream );
if ( Iff != NULL ) FreeIFF( Iff );
if ( IFFParseBase != NULL ) CloseLibrary( IFFParseBase );
}
ULONG read_clip( UBYTE *buffer, ULONG buflen )
{
struct ContextNode *cn;
ULONG length = 0;
OpenIFF( Iff, IFFF_READ );
if ( StopChunk( Iff, ID_FTXT, ID_CHRS ) == 0 )
{
while ( ParseIFF( Iff, IFFPARSE_SCAN ) == 0 )
{
cn = CurrentChunk( Iff );
if ( ( cn ) && ( cn->cn_Type == ID_FTXT ) && ( cn->cn_ID == ID_CHRS ) )
{
length = ReadChunkBytes( Iff, buffer, buflen );
break;
}
}
}
CloseIFF( Iff );
return length;
}
void write_clip( UBYTE *data, ULONG length )
{
OpenIFF( Iff, IFFF_WRITE );
if ( PushChunk( Iff, ID_FTXT, ID_FORM, IFFSIZE_UNKNOWN ) == 0 )
{
if ( PushChunk( Iff, 0, ID_CHRS, IFFSIZE_UNKNOWN ) == 0 )
{
WriteChunkBytes( Iff, data, length );
PopChunk( Iff );
}
PopChunk (Iff);
}
CloseIFF( Iff );
}